/**
 * @file gameauthprogresswidget.h
 * @brief 游戏认证进度页面组件头文件
 *
 * GameAuthProgressWidget是一个美观的认证进度页面，用于显示：
 * - 游戏认证过程的实时进度
 * - 动画效果和状态指示
 * - 与主题统一的设计风格
 * - 用户友好的提示信息
 */

#ifndef GAMEAUTHPROGRESSWIDGET_H
#define GAMEAUTHPROGRESSWIDGET_H

#include <QWidget>              // Qt窗口部件基类
#include <QVBoxLayout>          // 垂直布局
#include <QHBoxLayout>          // 水平布局
#include <QLabel>               // 标签
#include <QProgressBar>         // 进度条
#include <QPushButton>          // 按钮
#include <QTimer>               // 定时器
#include <QPropertyAnimation>   // 属性动画
#include <QSequentialAnimationGroup> // 顺序动画组
#include <QParallelAnimationGroup>   // 并行动画组
#include <QGraphicsOpacityEffect>   // 透明度效果
#include <QMovie>               // 动画
#include "gameservice.h"

/**
 * @class GameAuthProgressWidget
 * @brief 游戏认证进度页面组件
 *
 * 提供美观的游戏认证进度显示界面，包含：
 * - 步骤指示器
 * - 进度动画
 * - 状态消息
 * - 取消操作
 */
class GameAuthProgressWidget : public QWidget
{
    Q_OBJECT  // 启用Qt元对象系统

public:
    /**
     * @enum AuthStep
     * @brief 认证步骤枚举
     */
    enum AuthStep {
        Connecting = 0,     ///< 连接API网关
        Authenticating,     ///< 认证游戏权限
        GettingToken,       ///< 获取游戏令牌
        ConnectingGame,     ///< 连接游戏服务器
        Completed,          ///< 认证完成
        Failed              ///< 认证失败
    };
    Q_ENUM(AuthStep)

    explicit GameAuthProgressWidget(QWidget *parent = nullptr);
    ~GameAuthProgressWidget();

    // === 认证控制 ===
    /**
     * @brief 开始认证流程
     * @param serverInfo 目标服务器信息
     * @param gameType 游戏类型
     */
    void startAuthentication(const GameService::GameServer &serverInfo, const QString &gameType);

    /**
     * @brief 取消认证流程
     */
    void cancelAuthentication();

    /**
     * @brief 重置认证状态
     */
    void resetAuthentication();

    // === 进度更新 ===
    /**
     * @brief 更新认证步骤
     * @param step 当前步骤
     * @param message 状态消息
     */
    void updateAuthStep(AuthStep step, const QString &message = QString());

    /**
     * @brief 设置认证进度
     * @param progress 进度百分比 (0-100)
     */
    void setAuthProgress(int progress);

    /**
     * @brief 显示认证错误
     * @param error 错误信息
     */
    void showAuthError(const QString &error);

    /**
     * @brief 显示认证成功
     * @param result 认证结果
     */
    void showAuthSuccess(const GameService::GameLoginResult &result);

signals:
    /**
     * @brief 认证取消信号
     */
    void authenticationCancelled();

    /**
     * @brief 认证完成信号
     * @param result 认证结果
     */
    void authenticationCompleted(const GameService::GameLoginResult &result);

    /**
     * @brief 认证失败信号
     * @param error 错误信息
     */
    void authenticationFailed(const QString &error);

    /**
     * @brief 重试认证信号
     */
    void retryAuthentication();

public slots:
    /**
     * @brief 应用与主界面统一的主题样式
     * 
     * 确保认证进度界面与主页面使用一致的颜色方案和样式
     */
    void applyUnifiedTheme();

protected:
    void showEvent(QShowEvent *event) override;
    void hideEvent(QHideEvent *event) override;

private slots:
    void onCancelClicked();
    void onRetryClicked();
    void onAnimationTimer();

private:
    // === UI初始化 ===
    void setupUI();
    void setupStepIndicators();
    void setupProgressArea();
    void setupActionButtons();
    
    // === 动画控制 ===
    void startLoadingAnimation();
    void stopLoadingAnimation();
    void animateStepTransition(AuthStep step);
    void updateStepIndicator(AuthStep step);
    
    // === 样式更新 ===
    void updateStepStyles();
    void setStepCompleted(int stepIndex, bool completed);
    void setStepActive(int stepIndex, bool active);
    void setStepError(int stepIndex, bool error);

    // === 主布局 ===
    QVBoxLayout *m_mainLayout;
    
    // === 头部区域 ===
    QWidget *m_headerWidget;
    QVBoxLayout *m_headerLayout;
    QLabel *m_titleLabel;
    QLabel *m_subtitleLabel;
    
    // === 步骤指示器 ===
    QWidget *m_stepsWidget;
    QHBoxLayout *m_stepsLayout;
    QList<QWidget*> m_stepIndicators;
    QList<QLabel*> m_stepLabels;
    QList<QLabel*> m_stepIcons;
    
    // === 进度区域 ===
    QWidget *m_progressWidget;
    QVBoxLayout *m_progressLayout;
    QProgressBar *m_progressBar;
    QLabel *m_statusLabel;
    QLabel *m_detailLabel;
    
    // === 操作按钮 ===
    QWidget *m_buttonWidget;
    QHBoxLayout *m_buttonLayout;
    QPushButton *m_cancelButton;
    QPushButton *m_retryButton;
    
    // === 状态管理 ===
    AuthStep m_currentStep;
    GameService::GameServer m_serverInfo;
    QString m_gameType;
    bool m_isAuthenticating;
    
    // === 动画组件 ===
    QTimer *m_animationTimer;
    QPropertyAnimation *m_fadeAnimation;
    QGraphicsOpacityEffect *m_opacityEffect;
    int m_animationFrame;
    
    // === 样式颜色 ===
    QString m_primaryColor;
    QString m_secondaryColor;
    QString m_backgroundColor;
    QString m_textColor;
    QString m_errorColor;
    QString m_successColor;
    QString m_warningColor;
    
    // === 步骤配置 ===
    QStringList m_stepTitles;
    QStringList m_stepIconTexts;  // 重命名以避免冲突
};

#endif // GAMEAUTHPROGRESSWIDGET_H
